package cn.xshi.sys.service.impl;

import cn.xshi.common.base.BaseService;
import cn.xshi.common.util.ExceptionUtil;
import cn.xshi.log.client.service.LogsUtil;
import cn.xshi.sys.dao.SysDepartInfoDao;
import cn.xshi.sys.form.SysDepartInfoForm;
import cn.xshi.sys.model.SysDepartInfo;
import cn.xshi.sys.service.SysDepartInfoService;
import cn.xshi.sys.service.SysPostService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @Desc 部门信息
 * @Author 邓纯杰
 * @CreateTime 2012-12-12 12:12:12
 */
@Service
public class SysDepartInfoServiceImpl extends BaseService implements SysDepartInfoService {

	@Resource
    SysDepartInfoDao sysDepartinfoDao;

	@Resource
    SysPostService sysPostService;

	@Resource
    LogsUtil logsUtil;

	/**
	* 分页
	* @param sysDepartInfoForm
	* @return
	*/
	public List<SysDepartInfo> getSysDepartInfoListByCondition(SysDepartInfoForm sysDepartInfoForm){
		try {
			return sysDepartinfoDao.getSysDepartInfoListByCondition(sysDepartInfoForm);
		} catch (Exception e) {
			throw new ExceptionUtil(e.getMessage(),e.getCause());
		}
	}

	/**
	* 查询对象
	* @param id
	* @return
	*/
	public SysDepartInfo getSysDepartInfoById(String id){
		try {
			return sysDepartinfoDao.getSysDepartInfoById(id);
		} catch (Exception e) {
			throw new ExceptionUtil(e.getMessage(),e.getCause());
		}
	}

	/**
	* 添加
	* @param sysDepartInfo
	* @return
	*/
	public int addSysDepartInfo(SysDepartInfo sysDepartInfo){
		int i = 0;
		try {
			sysDepartInfo.setCreateId(getCurrentAccountId());
			sysDepartInfo.setCreateTime(getDate());
			i = sysDepartinfoDao.addSysDepartInfo(sysDepartInfo);
			//统一推送
			addPushDataAuthority();
			logsUtil.aBLogs("部门业务类", "添加", "执行添加部门成功");
		} catch (Exception e) {
			logsUtil.aBLogs("部门业务类", "添加", "执行修改部门失败");
			throw new ExceptionUtil(e.getMessage(),e.getCause());
		}
		return i;
	}

	/**
	* 修改
	* @param sysDepartInfo
	* @return
	*/
	public int updateSysDepartInfo(SysDepartInfo sysDepartInfo){
		int i = 0;
		try {
			sysDepartInfo.setUpdateId(getCurrentAccountId());
			sysDepartInfo.setUpdateTime(getDate());
			i = sysDepartinfoDao.updateSysDepartInfo(sysDepartInfo);
			//统一推送
			addPushDataAuthority();
			logsUtil.aBLogs("部门业务类", "修改", "执行修改部门成功");
		} catch (Exception e) {
			logsUtil.aBLogs("部门业务类", "修改", "执行修改部门失败");
			throw new ExceptionUtil(e.getMessage(),e.getCause());
		}
		return i;
	}

	/**
	* 删除
	* @param condition 
	* @return
	*/
	public int delSysDepartInfo(Map<String,Object> condition){
		int i = 0;
		try {
			String[] idList = (String[])condition.get("id");
			for(String id:idList){
				Map<String, Object> map = new HashMap<String, Object>();
				map.put("parentId", id);
				//验证下级部门是否存在（正常部门）
				if(!sysDepartinfoDao.getSysDepartInfoListChild(map).isEmpty()){
					logsUtil.aBLogs("部门业务类", "删除", "执行删除部门，编号【"+id+"】存在下级部门，不能删除");
					return 0;
				}
				//验证是否存在岗位（正常岗位）
				map = new HashMap<String, Object>();
				map.put("id", id);
				if(!sysPostService.getSysPostInfoList(map).isEmpty()){
					logsUtil.aBLogs("部门业务类", "删除", "执行删除部门，编号【"+id+"】存在被岗位使用中，不能删除");
					return 0;
				}
			}
			i = sysDepartinfoDao.delSysDepartInfo(condition);
			//统一推送
			addPushDataAuthority();
			logsUtil.aBLogs("部门业务类", "删除", "执行删除部门成功");
		} catch (Exception e) {
			logsUtil.aBLogs("部门业务类", "删除", "执行删除部门失败");
			throw new ExceptionUtil(e.getMessage(),e.getCause());
		}
		return i;
	}
	
	/**
	 * 部门根目录集合
	 * @return
	 */
	public List<SysDepartInfo> getSysDepartInfoList(){
		try {
			return sysDepartinfoDao.getSysDepartInfoList();
		} catch (Exception e) {
			throw new ExceptionUtil(e.getMessage(),e.getCause());
		}
	}
	
	/**
	 * 查找子集合
	 * @param condition
	 * @return
	 */
	public List<SysDepartInfo> getSysDepartInfoListChild(Map<String,Object> condition){
		try {
			return sysDepartinfoDao.getSysDepartInfoListChild(condition);
		} catch (Exception e) {
			throw new ExceptionUtil(e.getMessage(),e.getCause());
		}
	}
	
	/**
	 * 查找所有集合
	 * @param condition
	 * @return
	 */
	public List<SysDepartInfo> getSysDepartInfoListAll(Map<String,Object> condition){
		try {
			return sysDepartinfoDao.getSysDepartInfoListAll(condition);
		} catch (Exception e) {
			throw new ExceptionUtil(e.getMessage(),e.getCause());
		}
	}
	
	/**
	 * 根据各种情况查找集合不分页（流程设计器中处理组 发起组等使用）
	 * @param condition
	 * @return
	 */
	public List<SysDepartInfo> querySysDepartInfoList(Map<String,Object> condition){
		return sysDepartinfoDao.querySysDepartInfoList(condition);
	}
}
